package com.hyt.it.ogt.kq.service.gov.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hyt.it.ogt.kq.service.gov.model.dto.CandidateSubjectExportDTO;
import com.hyt.it.ogt.kq.service.gov.model.vo.ArrangeCountVo;
import com.hyt.it.ogt.kq.service.gov.model.vo.arrange.ArrangeCount;
import com.hyt.it.ogt.kq.service.model.entity.CandidateSubject;
import com.hyt.it.ogt.kq.service.model.entity.Subject;
import com.hyt.it.ogt.kq.service.gov.model.dto.arrange.CandidateSubjectDTO;
import com.hyt.it.ogt.kq.service.gov.model.vo.CandidateSubjectVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.security.core.parameters.P;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 考生科目中间表 Mapper 接口
 * </p>
 *
 * @author huangyh
 * @since 2021-04-07
 */
public interface CandidateSubjectMapper extends BaseMapper<CandidateSubject> {

    /**
     * 根据科目编号和考试任务id删除考生科目
     * @param subjectCodeList 科目编号
     * @param taskId 考试任务id
     * @return 是否删除成功
     */
    //boolean deleteByCodes(@Param("subjectCodeList")List<String> subjectCodeList, @Param("taskId")String taskId);

    /**
     * 根据科目id删除考生科目
     * @param subjectIdList
     * @return
     */
    boolean deleteByIds(@Param("subjectIdList")List<String> subjectIdList);

    /**
     * 根据考生id删除考生科目数据
     * @param candidateIds
     * @return
     */
    int deleteByCandidateIds(String candidateIds);


    /**
     * 查询未编排的考生科目人数
     * @param taskId
     * @return
     */
    int selectNoTimeRoomCandidateCount(String taskId);

    /**
     * 根据考生ID获取考生科目名称列表
     * @param candidateId
     * @return
     */
    List<String> getCandidateSubjectNames(String candidateId);

    /**
     * 根据导入考生数据中的科目id及任务id获取科目列表
     * @param subjectCodes
     * @param taskId
     * @return
     */
    List<Subject> existBySubjects(Set<String> subjectCodes, String taskId);

    /**
     * 批量插入考生科目列表
     * @param subjects
     * @return
     */
    int insertSubjects(@Param("subjects")List<CandidateSubject> subjects);

    /**
     * 查询未编排的考生科目信息
     * @param taskId
     * @return
     */
    List<CandidateSubjectVO> selectNoArrangeCandidate(String taskId);

    /**
     * 同步报名数据，考生科目表中可能没有科目code，所以在修改科目的时候，调用此方法完善。
     * @param taskId
     * @return
     */
    //Integer updateCandidateSubjectCode(String taskId);

    /**
     * 完善考生表中身份证号被修改，而考生科目表中未被修改的问题。
     * @param taskId
     * @return
     */
    //Integer updateCandidateSubjectIdNumber(String taskId);

    /**
     * 获取考生科目数据
     * @param taskId 考试任务id
     * @return 考生科目数据
     */
    List<CandidateSubjectDTO> getCandidateSubjectDTO(String taskId);

    /**
     * 获取未编排的考生科目数据--线上模式
     * @param taskId
     * @return
     */
    List<CandidateSubjectDTO> selectNoArrangeCandidateByOnLine(String taskId);

    /**
     * 通过考生id查询考务下考生科目一些字段：subjectId answerType candidateId subjectName
     *
     * @param candidateIds 考生id
     * @param taskId 考务id
     * @return 考生科目
     */
    List<CandidateSubjectDTO> getByCandidateIdsAndTaskId(List<String> candidateIds, String taskId);

    List<ArrangeCount> getSubjectCandidateCount(String taskId);

    List<CandidateSubjectExportDTO> selectForCandidateExport(@Param("taskId") String taskId);

    List<ArrangeCountVo> getCountBySubject(String taskId);
}
